#include <iostream>
#include <cstring>
#include <unistd.h>
#include <sys/timerfd.h>
#include<memory>

int main()
{
    // 创建了一个计时器对象，并没有启动
    // 以系统启动时间递增的一个基准值
    int timefd = timerfd_create(CLOCK_MONOTONIC, 0); // 0表示阻塞读
    if (timefd < 0)
    {
        perror("timerfd_create fail");
        return -1;
    }

    // 启动对象
    // 启动对象之前需要设置我们的时间
    struct itimerspec newt;
    // 第一次超时时间
    newt.it_value.tv_sec = 1;
    newt.it_value.tv_nsec = 0;

    // 第一次之后的超时时间
    newt.it_interval.tv_sec = 1;
    newt.it_interval.tv_nsec = 0;

    // 设置超时时间，第二个参数为获取前一次设置，一般不要
    int n = timerfd_settime(timefd, 0, &newt, nullptr);
    if(n < 0)
    {
        perror("timerfd_settime fail");
        return -2;
    }
    // while (true)
    // {
    //     uint64_t times;
    //     n = read(timefd, &times, 8);
    //     if (n < 0)
    //     {
    //         perror("read fail");
    //         return -3;
    //     }
    //      std::cout << "你已经超时了：" << times << "次" << std::endl;
    // }
    int * a = new int;
    std::shared_ptr<int> pt(a);
    std::shared_ptr<int> pt_2(a);
    std::shared_ptr<int> pt_3(pt_2);

    std::cout << pt.use_count()  << std::endl;
    std::cout << pt_2.use_count()  << std::endl;
    std::cout << pt_3.use_count()  << std::endl;

    return 0;
}